package main

import (
	"fmt"
	"strings"
)

// 闭包是什么？
// 闭包是一个函数，这个函数包含了他外部作用域的一个变量
// 底层的原理：
// 1.函数可以作为返回值
// 2.函数内部查找变量的顺序，现在自己内部找，找不到往外层找
// 闭包 = 函数 + 外部变量的引用
func adder(x int) func(int) int {
	// var x = 100
	return func(y int) int {
		x += y
		return x
	}
}

// 闭包
func makeSuffixFunc(suffix string) func(string) string {
	return func(name string) string {
		// 判断传过来的字符串后缀 不以suffix为后缀的话  拼接一个后缀 然后return name
		if !strings.HasSuffix(name, suffix) {
			return name + suffix
		}
		return name
	}
}
func main() {
	ret := adder(100)
	ret2 := ret(200)
	fmt.Println(ret2)
	jpgFunc := makeSuffixFunc(".jpg")
	fmt.Println(jpgFunc("abc"))
	fmt.Println(jpgFunc("abc.jpg"))
}
